home *** CD-ROM | disk | FTP | other *** search
/ Express Pd: GALORE / Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso / productivity / term / daypanel.c < prev    next >
C/C++ Source or Header  |  1993-07-16  |  7KB  |  284 lines

  1. /*
  2. **    DayPanel.c
  3. **
  4. **    Editing panel for day of week selection
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TEXT,GAD_COMMENT=8,GAD_USE,GAD_CANCEL };
  13.  
  14. STATIC struct Gadget *
  15. CreateAllGadgets(struct TimeDateNode *Node,struct Gadget **GadgetArray,struct Gadget **GadgetList)
  16. {
  17.     struct Gadget        *Gadget;
  18.     struct NewGadget     NewGadget;
  19.     UWORD             Counter = 0;
  20.  
  21.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  22.  
  23.     memset(&NewGadget,0,sizeof(struct NewGadget));
  24.  
  25.     if(Gadget = CreateContext(GadgetList))
  26.     {
  27.         SZ_AddLeftOffset(SZ_LeftOffsetN(MSG_DAYPANEL_ACTIVE_DAYS_GAD,MSG_DAYPANEL_MONDAY_GAD,MSG_DAYPANEL_TUESDAY_GAD,MSG_DAYPANEL_WEDNESDAY_GAD,MSG_DAYPANEL_THURSDAY_GAD,MSG_DAYPANEL_FRIDAY_GAD,MSG_DAYPANEL_SATURDAY_GAD,MSG_DAYPANEL_SUNDAY_GAD,MSG_GLOBAL_COMMENT_GAD,-1));
  28.  
  29.         SZ_SetWidth(SZ_Width(STRING_KIND,NULL,20,NULL));
  30.  
  31.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_ACTIVE_DAYS_GAD);
  32.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  33.         NewGadget . ng_GadgetID        = Counter;
  34.  
  35.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  36.             SZ_Adjust,        TRUE,
  37.             SZ_AutoWidth,        TRUE,
  38.         TAG_DONE);
  39.  
  40.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_MONDAY_GAD);
  41.         NewGadget . ng_GadgetID        = Counter;
  42.         NewGadget . ng_Flags        = 0;
  43.  
  44.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  45.             SZ_Adjust,        TRUE,
  46.             SZ_AutoWidth,        TRUE,
  47.  
  48.             GTCB_Checked,    Node -> Header . Day & DAY_MONDAY,
  49.         TAG_DONE);
  50.  
  51.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_TUESDAY_GAD);
  52.         NewGadget . ng_GadgetID        = Counter;
  53.  
  54.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  55.             SZ_Adjust,    TRUE,
  56.             SZ_AutoWidth,    TRUE,
  57.  
  58.             GTCB_Checked,    Node -> Header . Day & DAY_TUESDAY,
  59.         TAG_DONE);
  60.  
  61.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_WEDNESDAY_GAD);
  62.         NewGadget . ng_GadgetID        = Counter;
  63.  
  64.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  65.             SZ_Adjust,    TRUE,
  66.             SZ_AutoWidth,    TRUE,
  67.  
  68.             GTCB_Checked,    Node -> Header . Day & DAY_WEDNESDAY,
  69.         TAG_DONE);
  70.  
  71.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_THURSDAY_GAD);
  72.         NewGadget . ng_GadgetID        = Counter;
  73.  
  74.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  75.             SZ_Adjust,    TRUE,
  76.             SZ_AutoWidth,    TRUE,
  77.  
  78.             GTCB_Checked,    Node -> Header . Day & DAY_THURSDAY,
  79.         TAG_DONE);
  80.  
  81.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_FRIDAY_GAD);
  82.         NewGadget . ng_GadgetID        = Counter;
  83.  
  84.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  85.             SZ_Adjust,    TRUE,
  86.             SZ_AutoWidth,    TRUE,
  87.  
  88.             GTCB_Checked,    Node -> Header . Day & DAY_FRIDAY,
  89.         TAG_DONE);
  90.  
  91.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_SATURDAY_GAD);
  92.         NewGadget . ng_GadgetID        = Counter;
  93.  
  94.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  95.             SZ_Adjust,    TRUE,
  96.             SZ_AutoWidth,    TRUE,
  97.  
  98.             GTCB_Checked,    Node -> Header . Day & DAY_SATURDAY,
  99.         TAG_DONE);
  100.  
  101.         NewGadget . ng_GadgetText    = LocaleString(MSG_DAYPANEL_SUNDAY_GAD);
  102.         NewGadget . ng_GadgetID        = Counter;
  103.  
  104.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  105.             SZ_Adjust,    TRUE,
  106.             SZ_AutoWidth,    TRUE,
  107.  
  108.             GTCB_Checked,    Node -> Header . Day & DAY_SUNDAY,
  109.         TAG_DONE);
  110.  
  111.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_COMMENT_GAD);
  112.         NewGadget . ng_GadgetID        = Counter;
  113.  
  114.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  115.             SZ_Adjust,    TRUE,
  116.             SZ_AutoWidth,    TRUE,
  117.  
  118.             GTST_String,    Node -> Header . Comment,
  119.             GTST_MaxChars,    19,
  120.             GA_Immediate,    TRUE,
  121.         TAG_DONE);
  122.  
  123.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  124.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  125.  
  126.         SZ_SetWidth(SZ_ResetMaxWidth());
  127.  
  128.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  129.         NewGadget . ng_GadgetID        = Counter;
  130.         NewGadget . ng_Flags        = 0;
  131.  
  132.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  133.             SZ_Adjust,    TRUE,
  134.             SZ_AutoWidth,    TRUE,
  135.             SZ_AlignExtra,    TRUE,
  136.             SZ_AlignLeft,    TRUE,
  137.             SZ_AlignBottom,    TRUE,
  138.         TAG_DONE);
  139.  
  140.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  141.         NewGadget . ng_GadgetID        = Counter;
  142.  
  143.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  144.             SZ_Adjust,    TRUE,
  145.             SZ_AutoWidth,    TRUE,
  146.             SZ_AlignRight,    TRUE,
  147.         TAG_DONE);
  148.     }
  149.  
  150.     return(Gadget);
  151. }
  152.  
  153. BYTE
  154. DayPanel(struct TimeDateNode *Node)
  155. {
  156.     struct Window        *PanelWindow;
  157.     struct Gadget        *GadgetList;
  158.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  159.     BYTE             Result = FALSE;
  160.     struct TimeDateNode     LocalNode;
  161.  
  162.     LocalNode = *Node;
  163.  
  164.     if(CreateAllGadgets(Node,GadgetArray,&GadgetList))
  165.     {
  166.         if(PanelWindow = OpenWindowTags(NULL,
  167.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  168.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  169.             WA_Width,    SZ_GetWindowWidth(),
  170.             WA_Height,    SZ_GetWindowHeight(),
  171.  
  172.             WA_Activate,    TRUE,
  173.             WA_DragBar,    TRUE,
  174.             WA_DepthGadget,    TRUE,
  175.             WA_RMBTrap,    TRUE,
  176.             WA_DepthGadget,    TRUE,
  177.             WA_CloseGadget,    TRUE,
  178.             WA_CustomScreen,Window -> WScreen,
  179.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | BUTTONIDCMP | STRINGIDCMP | CHECKBOXIDCMP,
  180.             WA_Title,    LocaleString(MSG_DAYPANEL_DAY_SETTINGS_TXT),
  181.         TAG_DONE))
  182.         {
  183.             struct IntuiMessage    *Massage;
  184.             ULONG             IClass,Code;
  185.             struct Gadget        *Gadget;
  186.             BYTE             Terminated = FALSE;
  187.             LONG             i;
  188.  
  189.             GuideContext(CONTEXT_DAY);
  190.  
  191.             PushWindow(PanelWindow);
  192.  
  193.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  194.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  195.             GT_RefreshWindow(PanelWindow,NULL);
  196.  
  197.             ActiveGadget = NULL;
  198.  
  199.             ClrSignal(SIG_BREAK);
  200.  
  201.             while(!Terminated)
  202.             {
  203.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  204.                 {
  205.                     *Node = LocalNode;
  206.  
  207.                     break;
  208.                 }
  209.  
  210.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  211.                 {
  212.                     IClass    = Massage -> Class;
  213.                     Code    = Massage -> Code;
  214.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  215.  
  216.                     GT_ReplyIMsg(Massage);
  217.  
  218.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  219.  
  220.                     if(IClass == IDCMP_GADGETDOWN)
  221.                     {
  222.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  223.                             ActiveGadget = Gadget;
  224.                     }
  225.  
  226.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  227.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  228.  
  229.                     if(IClass == IDCMP_CLOSEWINDOW)
  230.                     {
  231.                         *Node = LocalNode;
  232.  
  233.                         Terminated = TRUE;
  234.                     }
  235.  
  236.                     if(IClass == IDCMP_GADGETUP)
  237.                     {
  238.                         switch(Gadget -> GadgetID)
  239.                         {
  240.                             case GAD_USE:
  241.  
  242.                                 strcpy(Node -> Header . Comment,SZ_GetString(GadgetArray[GAD_COMMENT]));
  243.  
  244.                                 Node -> Header . Day = 0;
  245.  
  246.                                 for(i = 1 ; i < 8 ; i++)
  247.                                 {
  248.                                     if(SZ_GetChecked(GadgetArray[i]))
  249.                                         Node -> Header . Day |= (1 << (i - 1));
  250.                                 }
  251.  
  252.                                 Terminated = TRUE;
  253.  
  254.                                 Result = Node -> Header . Day;
  255.  
  256.                                 break;
  257.  
  258.                             case GAD_CANCEL:
  259.  
  260.                                 *Node = LocalNode;
  261.  
  262.                                 Terminated = TRUE;
  263.  
  264.                                 break;
  265.                         }
  266.                     }
  267.                 }
  268.             }
  269.  
  270.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  271.  
  272.             PopWindow();
  273.  
  274.             CloseWindow(PanelWindow);
  275.         }
  276.  
  277.         FreeGadgets(GadgetList);
  278.     }
  279.  
  280.     ActiveGadget = NULL;
  281.  
  282.     return(Result);
  283. }
  284.